package com.mars.admin.modules.activity.entity;

import com.mars.admin.modules.base.entity.BaseEntity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 活动实体
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Table("tb_activity")
@Schema(description = "活动")
public class Activity extends BaseEntity {

    /**
     * 活动ID
     */
    @Id(keyType = KeyType.Auto)
    @Schema(description = "活动ID", example = "1")
    private Long id;

    /**
     * 分类ID
     */
    @Schema(description = "分类ID", example = "1")
    private Long categoryId;

    /**
     * 发布者用户ID
     */
    @Schema(description = "发布者用户ID", example = "1")
    private Long userId;

    /**
     * 活动标题
     */
    @Schema(description = "活动标题", example = "周末登山活动")
    private String title;

    /**
     * 活动副标题
     */
    @Schema(description = "活动副标题", example = "体验自然之美")
    private String subtitle;

    /**
     * 活动描述
     */
    @Schema(description = "活动描述", example = "一起去登山，感受大自然的魅力")
    private String description;

    /**
     * 封面图片
     */
    @Schema(description = "封面图片", example = "https://example.com/cover.jpg")
    private String coverImage;

    /**
     * 活动图片集合
     */
    @Schema(description = "活动图片集合", example = "[\"https://example.com/1.jpg\"]")
    private String images;

    /**
     * 活动视频
     */
    @Schema(description = "活动视频", example = "https://example.com/video.mp4")
    private String videoUrl;

    /**
     * 活动地点
     */
    @Schema(description = "活动地点", example = "香山公园")
    private String location;

    /**
     * 详细地址
     */
    @Schema(description = "详细地址", example = "北京市海淀区香山路")
    private String address;

    /**
     * 纬度
     */
    @Schema(description = "纬度", example = "39.9042")
    private BigDecimal latitude;

    /**
     * 经度
     */
    @Schema(description = "经度", example = "116.4074")
    private BigDecimal longitude;

    /**
     * 地区ID
     */
    @Schema(description = "地区ID", example = "1")
    private Long regionId;

    /**
     * 活动礼品ID
     */
    @Schema(description = "活动礼品ID", example = "1")
    private Long giftId;

    /**
     * 开始时间
     */
    @Schema(description = "开始时间", example = "2025-01-15 09:00:00")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @Schema(description = "结束时间", example = "2025-01-15 17:00:00")
    private LocalDateTime endTime;

    /**
     * 报名开始时间
     */
    @Schema(description = "报名开始时间", example = "2025-01-08 00:00:00")
    private LocalDateTime registrationStartTime;

    /**
     * 报名结束时间
     */
    @Schema(description = "报名结束时间", example = "2025-01-14 23:59:59")
    private LocalDateTime registrationEndTime;

    /**
     * 最大参与人数，0表示不限制
     */
    @Schema(description = "最大参与人数", example = "20")
    private Integer maxParticipants;

    /**
     * 最小参与人数
     */
    @Schema(description = "最小参与人数", example = "5")
    private Integer minParticipants;

    /**
     * 当前参与人数
     */
    @Schema(description = "当前参与人数", example = "8")
    private Integer currentParticipants;

    /**
     * 活动价格
     */
    @Schema(description = "活动价格", example = "99.00")
    private BigDecimal price;

    /**
     * 原价
     */
    @Schema(description = "原价", example = "129.00")
    private BigDecimal originalPrice;

    /**
     * 是否免费：0-收费，1-免费
     */
    @Schema(description = "是否免费", example = "0")
    private Integer isFree;

    /**
     * 是否需要审核：0-不需要，1-需要
     */
    @Schema(description = "是否需要审核", example = "1")
    private Integer needApproval;

    /**
     * 活动类型：1-线下活动，2-线上活动，3-混合活动
     */
    @Schema(description = "活动类型", example = "1")
    private Integer activityType;

    /**
     * 难度等级：1-简单，2-中等，3-困难，4-极限
     */
    @Schema(description = "难度等级", example = "2")
    private Integer difficultyLevel;

    /**
     * 最小年龄限制
     */
    @Schema(description = "最小年龄限制", example = "18")
    private Integer ageLimitMin;

    /**
     * 最大年龄限制
     */
    @Schema(description = "最大年龄限制", example = "60")
    private Integer ageLimitMax;

    /**
     * 性别限制：0-不限，1-仅男性，2-仅女性
     */
    @Schema(description = "性别限制", example = "0")
    private Integer genderLimit;

    /**
     * 联系人
     */
    @Schema(description = "联系人", example = "张三")
    private String contactPerson;

    /**
     * 联系电话
     */
    @Schema(description = "联系电话", example = "13800138000")
    private String contactPhone;

    /**
     * 微信号
     */
    @Schema(description = "微信号", example = "zhangsan123")
    private String contactWechat;

    /**
     * 参与要求
     */
    @Schema(description = "参与要求", example = "身体健康，有一定运动基础")
    private String requirements;

    /**
     * 费用包含
     */
    @Schema(description = "费用包含", example = "门票、导游费、保险")
    private String includes;

    /**
     * 费用不含
     */
    @Schema(description = "费用不含", example = "交通费、餐费")
    private String excludes;

    /**
     * 注意事项
     */
    @Schema(description = "注意事项", example = "请穿运动鞋，携带水杯")
    private String notes;

    /**
     * 退款政策
     */
    @Schema(description = "退款政策", example = "活动前3天可全额退款")
    private String refundPolicy;

    /**
     * 活动标签
     */
    @Schema(description = "活动标签", example = "[\"户外\", \"登山\", \"健身\"]")
    private String tags;

    /**
     * 浏览次数
     */
    @Schema(description = "浏览次数", example = "156")
    private Integer viewCount;

    /**
     * 点赞数
     */
    @Schema(description = "点赞数", example = "23")
    private Integer likeCount;

    /**
     * 评论数
     */
    @Schema(description = "评论数", example = "8")
    private Integer commentCount;

    /**
     * 分享数
     */
    @Schema(description = "分享数", example = "12")
    private Integer shareCount;

    /**
     * 收藏数
     */
    @Schema(description = "收藏数", example = "45")
    private Integer collectCount;

    /**
     * 是否置顶：0-否，1-是
     */
    @Schema(description = "是否置顶", example = "0")
    private Integer isTop;

    /**
     * 是否热门：0-否，1-是
     */
    @Schema(description = "是否热门", example = "1")
    private Integer isHot;

    /**
     * 是否推荐：0-否，1-是
     */
    @Schema(description = "是否推荐", example = "1")
    private Integer isRecommend;

    /**
     * 状态：0-草稿，1-已发布，2-已取消，3-已结束，4-审核中，5-审核拒绝
     */
    @Schema(description = "状态", example = "1")
    private Integer status;

    /**
     * 审核状态：0-待审核，1-审核通过，2-审核拒绝
     */
    @Schema(description = "审核状态", example = "1")
    private Integer auditStatus;

    /**
     * 审核原因
     */
    @Schema(description = "审核原因", example = "活动内容符合规范")
    private String auditReason;

    /**
     * 审核时间
     */
    @Schema(description = "审核时间")
    private LocalDateTime auditTime;

    /**
     * 审核人ID
     */
    @Schema(description = "审核人ID", example = "1")
    private Long auditUserId;
} 